package highFrequencyLeetcode.leetcode_66;

/**
 * <p>
 *
 * 给定一个由整数组成的非空数组所表示的非负整数，在该数的基础上加一。
 *
 * 最高位数字存放在数组的首位， 数组中每个元素只存储一个数字。
 *
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 *
 * 示例 1:
 *
 * 输入: [1,2,3]
 * 输出: [1,2,4]
 * 解释: 输入数组表示数字 123。
 *
 *
 * 示例 2:
 *
 * 输入: [4,3,2,1]
 * 输出: [4,3,2,2]
 * 解释: 输入数组表示数字 4321。
 *
 * </p>
 *
 * @author Seina
 * @version 2019-06-11 19:45:31
 */
public class PlusOne {

    /**
     * 此题需要注意的是如果末位加一之后的值是 10，需要进一位
     * 例如 999，加一之后 多一位数
     * 
     * @param digits: 输入的数组表示一个数字
     * @return 输出一个数组，表示加一之后的数字
     */
    public int[] plusOne(int[] digits) {
        
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            /**
             * Java 语言的 % 表示取余，此段代码大致有两种情况：
             * 加一之后等于 10，那么 10 % 10 = 0，该位置元素变成 0
             * 加一之后不等于 10，那么 9 % 10 = 9，该位置元素就是加一后的值 9
             */
            digits[i] %= 10;
            /**
             * 等于 0 时，直接进入下一层循环，继续将前面的元素加一
             * 不等于 0 时，表示不用进位，直接返回结果
             */
            if (digits[i] != 0) return digits;
        }
        //特殊考虑到 99999 等的情况
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}
